如何用 Python 增量备份 Roam Research 笔记图片?
消除后顾之忧,轻松输入卡片笔记。
前些日子,我用视频的方式给你介绍了 Roam Research 这款工具。如果你还没有来得及看,这里是链接。
视频发布后,有的朋友积极地尝试使用,然后给我的反馈是这个样子的。
我看到以后,为他能够找到一款心仪的笔记工具,提高输出效率而感到高兴。
也有一些朋友和读者,私信和后台留言不断地在问我:
王老师,这款应用靠谱吗?能长久运营下去吗?
在上面写的东西是否安全?会不会丢掉资料?
在线的东西我可不敢轻易使用啊。它有桌面端下载地址吗?
……
我一一答疑,弄得焦头烂额。
后来实在答不过来,只好找了个有桌面端的类似产品。遇到谁再问上面的问题,就直接把链接发过去。
我这儿有些劳动超负荷。但并不意味着,读者们提的这个问题不重要。
我们在使用一款新的工具,尤其是笔记工具之前,首先得保证安全。
毕竟这里面记载的,是我们很重要的思考内容和输出成果。笔记工具号称自己是「第二大脑」。想想看,大脑重不重要?要不要好好保护?
如果笔记不能够保证安全,记着记着就不见了,那感觉肯定很糟糕。
我就有过惨痛的亲身经历。
在高一暑假的时候,我曾经发奋写过一本小书,还是章回体的。写了十几章的时候,突然间硬盘坏了。那一刻,我头脑是空白的。
跑到电脑城去修理,人家告诉我那叫「引导区划损」,没治。于是,资料再也没找回来。
更糟糕的是,我没有备份。一章都没有。
那儿之后,我知道了备份的重要性,一直都注意备份操作。
那么说到 Roam Research 这款在线应用,它的备份功能做的怎么样呢?
我觉得做的是很好的。
Roam Research 的作者在设计之初,就定下来一个基调——他不准备把用户强制留在这里。
据他说,有一些同行做出来的应用,总是恨不得让用户来的时候很方便、门槛很低,但是将来想转移出去,会很费劲。
这或许是一种很高明的经营策略,但是 Roam Research 的作者不愿意做这样的事情。
他希望的,是留在平台上的用户,都是因为真正喜欢使用,而不是跑不掉了。
所以,在导出格式的选择上, Roam Reserach 非常慷慨地提供了 Markdown 格式。
Markdown 格式非常简单,容易上手。我之前给你介绍过如何用它写论文、做幻灯,你不难了解到它的易用性。
因为简单易用, Markdown 在很多笔记工具上,都有良好支持。例如 Ulysses, Gingko, Bear 等,以及在这篇教程中给你介绍过的新晋免费学术写作利器,都可以使用它。
那么,是不是说有 Markdown 这样的导出格式,你的所有资料就都安全了呢?
如果你往 Roam Reserach 里边儿输入的只有文字,那基本上差不多了。但是这里面我们不能忽略笔记的一个重要组成部分,那就是图片。
我不知道你记笔记怎么样,反正我是经常需要使用插入图片功能的。
比如说我在这里给大家做一些教程,许多都要演示操作和结果。那么我在记笔记的时候,就有意识地要把当时的一些截图记下来。这样我组织文章的时候,就可以拼接笔记卡片,非常方便地把内容整合起来,输出成文章级别。
如果这时候,让我回头去重新制作或者找寻图片,那我的写作成本,就会变得非常高。
当我使用一些文献阅读工具时,经常在上面写写画画。我会把这些潦草的文字作为图片保存下来。
在 "how to take smart notes?" 这本书中,这些内容属于第一遍笔记。可以在不打断阅读心流的时候,把要点抓取下来,这样在后面整理的时候,你才能更加方便和省力。
因此我在这里面会上传大量的图片到 Roam Reserach 。可是问题在于这些图片是怎么样存储的呢?如果你在导出的 Markdown 文件里面查看的话,会发现图片的链接都是这个样子的:
这个链接形式告诉我们, Roam Reserach 图片存储的位置在 Google 云上。它的名字叫做 Cloud Storage for Firebase。
从理论上说,这服务的安全性和可扩展性挺好的。可是有一个小问题。
你存储的时候,用的不是你个人的 Google 云账户进行访问控制,而是 Roam Research 的账户。你上传下载都没问题。但是如果开发者的账户出了问题,例如被人攻击窃取,那你的这些图片随时可能被骇客删除掉。
或者如果 Google 云服务器发生问题,你的图片也会烟消云散。虽然后面这种情况的概率很低。
尽管听起来,确实有点儿像杞人忧天。不过小心驶得万年船。做个备份不是坏事儿。随着存到 Roam Reserach 上的图片越来越多,我觉得还是有必要的在本地留一个备份。
方法并不难,找到所有的云端图片链接,备份到本地的一个文件夹。
更保险的方式,是把这个文件夹放到云同步平台,例如 Dropbox 或者坚果云上面。同一份图片,你于是就有三个副本:一个在Google的云上,一个在你本地的硬盘里,还有一个在这个第三方的云。
那么,假如这三个位置的副本都同时都毁坏怎么办?
真到了发生这种事儿的时候,估计是小行星又来光顾地球了。听我一句劝,笔记别要了,逃命要紧。
玩笑归玩笑。上面的流程,听起来并不复杂,可要真的是执行起来,也挺麻烦的。
解压一堆 Markdown 文件,找到所有的图片链接,然后一一下载……
绝对不能手动操作啊!
咱们得用脚本,自动化执行。
Python 是咱们的好帮手。
你可以让 Python 去循环往复,找到这些链接,一一帮你下载下来。
况且,你也不需要一个个 Markdown 文件里面去找链接。那多麻烦!
Roam Reserach 还提供了一个选项,就是把所有笔记,导出成为 JSON 格式。这样一个文件里面,就包含了所有的图片链接。岂不妙哉?
但是很快,你又高兴不起来了。
随着不断地输入笔记到 Roam Reserach ,你的图片备份就不全了,需要更新。
每一次为了完整备份图片,你还得从头做一遍吗?
这太烦人了。今天我用脚本下载 600 兆的图片,等了好几十分钟。要是每次备份都得花这么长时间,而且每次时间都变得更长,那谁受得了?
当然了,我们不需要把自己逼到这样的窘境。
因为你不必每次都下载所有的图片。
解决的办法,是增量备份。就是每一次备份,只把那些之前没有备份的图片文件专门儿挑出来,下载。其他的略过就好。
为了做到这个事儿,你需要有个记录表。这个表格记下你已经下载了哪些文件,存在了哪里。
每次新下载之后,你都更新这个记录表。这样,你就不会在已经下载过的文件上耽误时间了。
为了说明这个过程,我手绘了一张流程图。
估计世界上你也找不到第二张这么丑的流程图了。哪位 Visio 用得好?欢迎帮我把它规范绘制出来。谢谢!
不过,能说明大意就好嘛。
在这个图片备份脚本中,主要用到以下的这几个软件包。
一个是 requests ,这个软件包是负责用来从网上下载东西的。
一个是正则表达式包 re 。如果你对「正则表达式」这个名词印象不够深刻了,建议复习这篇《如何用 Python 和正则表达式抽取文本结构化信息?》
还有一个包就是 JSON,他帮你做的,是读写下载记录。
这个记录,除了实现咱们提到的增量备份,避免每次重复做无用功之外,还有一个重要用途。将来如果真的发生资料丢失,或者你不准备再使用 Roam Reserach 了,可以利用它替换你所有的 Markdown 文件。于是你的 Markdown 文件里面,就都是实打实的本地图片链接了。
执行起来的效果,是这样的。
我把这个脚本放到了 Github 上,你可以在我的公众号玉树芝兰后台回复「imgbak」,直接查看源码和下载使用。
这样一来,你就有了一个可以让你踏实安心的 Roam Reserach 备份工具。从文本到图片,全都备份在本地。
而我,也从此可以避免回答「 Roam Reserach 到底可以存活多久」、「在线笔记靠不靠谱」之类的问题了。善哉!
祝你记笔记的过程,变得更加轻松愉快!
感觉有用的话,请点“在看”,并且把它转发给你身边有需要的朋友。
顺便说一下,如果你想要阅读 "how to take smart notes?" Kindle 版本,这里是链接。
赞赏就是力量。
由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。
订阅我的微信公众号“玉树芝兰”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。
如果你希望能与其他热爱学习的小伙伴一起讨论切磋,答疑解惑,欢迎加入知识星球。
延伸阅读
你可能也会对以下话题感兴趣。点击链接就可以查看。